function _new(ctor, ...args) {
  if (typeof ctor !== "function") {
    throw `${ctor} must be a function`;
  }
  let obj = new Object();
  // 这样的一步就可以做到一个所有原型的继承吗？
  /***
   * 1.新建立的一个object的实例的 那个所指向的位置 就可以说明
   * obj.__proto__ ===  Object.prototype // true
   *
   * 2. 使用Object.create可以说是复制出来一个ctor的原型的东西，把它的prototype 如下
   *
   * 3. 最后我的obj就会继承了ctor 的一些原型属性这个样子
   */
  obj.__proto__ = Object.create(ctor.prototype);
  let res = ctor.apply(obj, args);

  let isObject = typeof res === "object" && typeof res !== null;
  let isFunction = typeof res === "function";
  return isObject || isFunction ? res : obj;
}

function Person(name) {
  // constructor() {

  // }
  this.name = name;
  return {
    name: "nihao",
  };
}

let p = _new(Person, "这样");

console.log(p);
